/**
 * Base64 解码，支持 UTF-8 编码
 * @param str Base64 编码的字符串
 * @returns 解码后的字符串
 */
export const decode = (str: string): string => {
  // 先将 base64 转换为二进制字符串
  const binaryStr = atob(str)
  // 将二进制字符串转换为 Uint8Array
  const bytes = new Uint8Array(binaryStr.length)
  for (let i = 0; i < binaryStr.length; i++) {
    bytes[i] = binaryStr.charCodeAt(i)
  }
  // 使用 TextDecoder 将 Uint8Array 转换为字符串
  return new TextDecoder('utf-8').decode(bytes)
}

/**
 * Base64 编码，支持 UTF-8 编码
 * @param str 要编码的字符串
 * @returns Base64 编码的字符串
 */
export const encode = (str: string): string => {
  // 使用 TextEncoder 将字符串转换为 Uint8Array
  const bytes = new TextEncoder().encode(str)
  // 将 Uint8Array 转换为二进制字符串
  let binaryStr = ''
  for (let i = 0; i < bytes.length; i++) {
    binaryStr += String.fromCharCode(bytes[i])
  }
  // 将二进制字符串转换为 base64
  return btoa(binaryStr)
}
